home *** CD-ROM | disk | FTP | other *** search
- package java.security;
-
- import [Ljava.security.ProtectionDomain;;
- import java.util.ArrayList;
- import sun.security.util.Debug;
- import sun.security.util.SecurityConstants;
-
- public final class AccessControlContext {
- private ProtectionDomain[] context;
- private boolean isPrivileged;
- private AccessControlContext privilegedContext;
- private DomainCombiner combiner = null;
- private static boolean debugInit = false;
- private static Debug debug = null;
-
- static Debug getDebug() {
- if (debugInit) {
- return debug;
- } else {
- if (Policy.isSet()) {
- debug = Debug.getInstance("access");
- debugInit = true;
- }
-
- return debug;
- }
- }
-
- public AccessControlContext(ProtectionDomain[] var1) {
- if (var1.length == 0) {
- this.context = null;
- } else if (var1.length == 1) {
- if (var1[0] != null) {
- this.context = (ProtectionDomain[])((ProtectionDomain;)var1).clone();
- } else {
- this.context = null;
- }
- } else {
- ArrayList var2 = new ArrayList(var1.length);
-
- for(int var3 = 0; var3 < var1.length; ++var3) {
- if (var1[var3] != null && !var2.contains(var1[var3])) {
- var2.add(var1[var3]);
- }
- }
-
- this.context = new ProtectionDomain[var2.size()];
- this.context = (ProtectionDomain[])var2.toArray(this.context);
- }
-
- }
-
- public AccessControlContext(AccessControlContext var1, DomainCombiner var2) {
- SecurityManager var3 = System.getSecurityManager();
- if (var3 != null) {
- var3.checkPermission(SecurityConstants.CREATE_ACC_PERMISSION);
- }
-
- this.context = var1.context;
- this.combiner = var2;
- }
-
- AccessControlContext(ProtectionDomain[] var1, DomainCombiner var2) {
- if (var1 != null) {
- this.context = (ProtectionDomain[])((ProtectionDomain;)var1).clone();
- }
-
- this.combiner = var2;
- }
-
- AccessControlContext(ProtectionDomain[] var1, boolean var2) {
- this.context = var1;
- this.isPrivileged = var2;
- }
-
- boolean isPrivileged() {
- return this.isPrivileged;
- }
-
- DomainCombiner getAssignedCombiner() {
- AccessControlContext var1;
- if (this.isPrivileged) {
- var1 = this.privilegedContext;
- } else {
- var1 = AccessController.getInheritedAccessControlContext();
- }
-
- return var1 != null ? var1.combiner : null;
- }
-
- public DomainCombiner getDomainCombiner() {
- SecurityManager var1 = System.getSecurityManager();
- if (var1 != null) {
- var1.checkPermission(SecurityConstants.GET_COMBINER_PERMISSION);
- }
-
- return this.combiner;
- }
-
- public void checkPermission(Permission var1) throws AccessControlException {
- boolean var2 = false;
- if (var1 == null) {
- throw new NullPointerException("permission can't be null");
- } else {
- if (getDebug() != null) {
- var2 = !Debug.isOn("codebase=");
- if (!var2) {
- for(int var3 = 0; this.context != null && var3 < this.context.length; ++var3) {
- if (this.context[var3].getCodeSource() != null && this.context[var3].getCodeSource().getLocation() != null && Debug.isOn("codebase=" + this.context[var3].getCodeSource().getLocation().toString())) {
- var2 = true;
- break;
- }
- }
- }
-
- var2 &= !Debug.isOn("permission=") || Debug.isOn("permission=" + var1.getClass().getCanonicalName());
- if (var2 && Debug.isOn("stack")) {
- Thread.currentThread();
- Thread.dumpStack();
- }
-
- if (var2 && Debug.isOn("domain")) {
- if (this.context == null) {
- debug.println("domain (context is null)");
- } else {
- for(int var7 = 0; var7 < this.context.length; ++var7) {
- debug.println("domain " + var7 + " " + this.context[var7]);
- }
- }
- }
- }
-
- if (this.context != null) {
- for(int var8 = 0; var8 < this.context.length; ++var8) {
- if (this.context[var8] != null && !this.context[var8].implies(var1)) {
- if (var2) {
- debug.println("access denied " + var1);
- }
-
- if (Debug.isOn("failure")) {
- if (!var2) {
- debug.println("access denied " + var1);
- }
-
- Thread.currentThread();
- Thread.dumpStack();
- ProtectionDomain var4 = this.context[var8];
- Debug var5 = debug;
- AccessController.doPrivileged(new 1(this, var5, var4));
- }
-
- throw new AccessControlException("access denied " + var1, var1);
- }
- }
-
- if (var2) {
- debug.println("access allowed " + var1);
- }
-
- }
- }
- }
-
- AccessControlContext optimize() {
- AccessControlContext var1;
- if (this.isPrivileged) {
- var1 = this.privilegedContext;
- } else {
- var1 = AccessController.getInheritedAccessControlContext();
- }
-
- boolean var2 = this.context == null;
- boolean var3 = var1 == null || var1.context == null;
- if (var1 != null && var1.combiner != null) {
- return this.goCombiner(this.context, var1);
- } else if (var3 && var2) {
- return this;
- } else if (var2) {
- return var1;
- } else {
- int var4 = this.context.length;
- if (var3 && var4 <= 2) {
- return this;
- } else if (var4 == 1 && this.context[0] == var1.context[0]) {
- return var1;
- } else {
- int var5 = var3 ? 0 : var1.context.length;
- ProtectionDomain[] var6 = new ProtectionDomain[var4 + var5];
- if (!var3) {
- System.arraycopy(var1.context, 0, var6, 0, var5);
- }
-
- label93:
- for(int var7 = 0; var7 < this.context.length; ++var7) {
- ProtectionDomain var8 = this.context[var7];
- if (var8 != null) {
- for(int var9 = 0; var9 < var5; ++var9) {
- if (var8 == var6[var9]) {
- continue label93;
- }
- }
-
- var6[var5++] = var8;
- }
- }
-
- if (var5 != var6.length) {
- if (!var3 && var5 == var1.context.length) {
- return var1;
- }
-
- if (var3 && var5 == var4) {
- return this;
- }
-
- ProtectionDomain[] var10 = new ProtectionDomain[var5];
- System.arraycopy(var6, 0, var10, 0, var5);
- var6 = var10;
- }
-
- this.context = var6;
- this.combiner = null;
- this.isPrivileged = false;
- return this;
- }
- }
- }
-
- private AccessControlContext goCombiner(ProtectionDomain[] var1, AccessControlContext var2) {
- if (getDebug() != null) {
- debug.println("AccessControlContext invoking the Combiner");
- }
-
- ProtectionDomain[] var3 = var2.combiner.combine(var1, var2.context);
- this.context = var3;
- this.combiner = var2.combiner;
- this.isPrivileged = false;
- return this;
- }
-
- public boolean equals(Object var1) {
- if (var1 == this) {
- return true;
- } else if (!(var1 instanceof AccessControlContext)) {
- return false;
- } else {
- AccessControlContext var2 = (AccessControlContext)var1;
- if (this.context == null) {
- return var2.context == null;
- } else if (var2.context == null) {
- return false;
- } else if (this.containsAllPDs(var2) && var2.containsAllPDs(this)) {
- if (this.combiner == null) {
- return var2.combiner == null;
- } else if (var2.combiner == null) {
- return false;
- } else {
- return this.combiner.equals(var2.combiner);
- }
- } else {
- return false;
- }
- }
- }
-
- private boolean containsAllPDs(AccessControlContext var1) {
- boolean var2 = false;
-
- for(int var4 = 0; var4 < this.context.length; ++var4) {
- var2 = false;
- ProtectionDomain var3;
- if ((var3 = this.context[var4]) == null) {
- for(int var8 = 0; var8 < var1.context.length && !var2; ++var8) {
- var2 = var1.context[var8] == null;
- }
- } else {
- Class var5 = var3.getClass();
-
- for(int var7 = 0; var7 < var1.context.length && !var2; ++var7) {
- ProtectionDomain var6 = var1.context[var7];
- var2 = var6 != null && var5 == var6.getClass() && var3.equals(var6);
- }
- }
-
- if (!var2) {
- return false;
- }
- }
-
- return var2;
- }
-
- public int hashCode() {
- int var1 = 0;
- if (this.context == null) {
- return var1;
- } else {
- for(int var2 = 0; var2 < this.context.length; ++var2) {
- if (this.context[var2] != null) {
- var1 ^= this.context[var2].hashCode();
- }
- }
-
- return var1;
- }
- }
- }
-